package com.util;

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Document;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.FontFactory;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import com.persistencia.domain.Docentexclase;
import com.persistencia.domain.Periodo;
import com.persistencia.domain.Salon;



import java.awt.Color;

import java.io.FileOutputStream;

import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.List;


public class ReporteHorario {
    /*private List<Docentexclase> listaDocentexClase;
    private List<Salon> listaSalon;
    private List<Periodo> listaPeriodo;*/
    int idDcnCls = 0;
    int nHoras = 0;
    String asignaturaaux = "";
    String asignatura = "";
    String modalidad = "";
    String dia = "";
    String aula = "";
    String horarioinicio = "";
    String horariofinal = "";
    String docente = "";
    String ciclo = "";
    String cicloaux = "";
    public ReporteHorario() {
    }
    
    public void generaPDF(List<HashMap<Integer, HashMap<Integer, Docentexclase>>> listaHorarios, List<Docentexclase> listaDocentexClase, List<Salon> listaSalon, List<Periodo> listaPeriodo, int indice) {
        try {
                        
                //---------------------------------------------------------------------------------------------------------------------
                Document document = new Document(PageSize.A4, 20, 20, 20, 20);
                //document.set
                         String ruta   = ("d:");//ruta de los JSPs
                      
             
                        PdfWriter writer = PdfWriter.getInstance(document,new FileOutputStream(ruta+"reportehorario.pdf"));
                        
                        document.open();
                        float[]  widths = {0.05f, 0.2f, 0.1f, 0.1f, 0.1f, 0.45f};
                        float[]  widthscab = {0.05f, 0.2f, 0.2f, 0.1f, 0.45f};
                        float[]  cabecera = {1.20f, 0.23f, 0.20f};
                        float[]  rotulo = {1.00f};
                        float[]  footer = {0.27f,0.70f, 0.13f, 0.13f, 0.2f, 0.2f};

                        
                        Paragraph p     = null;
                        PdfPTable table = null;
                        PdfPCell cell   = null;
             
                        Font tituloUniversidad = FontFactory.getFont("Arial", 11, Font.BOLD, BaseColor.BLACK );
                        //Font tituloFacultad  = FontFactory.getFont("Arial", 10, Font.NORMAL, BaseColor.BLACK);
                        Font tituloEscuela  = FontFactory.getFont("Arial", 9, Font.NORMAL, BaseColor.BLACK);
                        /*Font tituloConstancia   = FontFactory.getFont("Arial", 22, Font.BOLD, BaseColor.BLACK);
                        Font numeroConstancia   = FontFactory.getFont("Arial", 10, Font.BOLD, BaseColor.BLACK);
                        Font parrafo1   = FontFactory.getFont("Arial", 12, Font.NORMAL, BaseColor.BLACK);
                        Font nombreProfesor   = FontFactory.getFont("Arial", 13, Font.ITALIC, BaseColor.BLACK);
                        Font parrafo2   = FontFactory.getFont("Arial", 12, Font.NORMAL, BaseColor.BLACK);
                        Font lugarFecha   = FontFactory.getFont("Arial", 10, Font.NORMAL, BaseColor.BLACK);
                        Font nombreDirector   = FontFactory.getFont("Arial", 10, Font.NORMAL, BaseColor.BLACK);
                        Font piePagina   = FontFactory.getFont("Arial", 8, Font.NORMAL, BaseColor.BLACK);*/
                        Font text  = FontFactory.getFont("Arial", 9, Font.NORMAL, BaseColor.BLACK);
                        Font negrita  = FontFactory.getFont("Arial", 9, Font.BOLD, BaseColor.BLACK);
                        
                        
                        /*****Insertando imagenes al PDF **************/
                        Image logo       = Image.getInstance(ruta + "/UNMSM.jpg"); 
                        logo.scaleAbsolute(60,60);
                        logo.setAbsolutePosition(270,750);
                        document.add(logo);
                        
                        p = new Paragraph("                                                                       ");
                        document.add(p);
                        document.add(p);

                        //---------------------------------------------------------
                        table = new PdfPTable(1);
                        
                        //Codigo
                        
                        p = new Paragraph("UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS",tituloUniversidad);
                        cell = new PdfPCell(p);
                        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
                        cell.setPaddingTop(40);
                        cell.setBorderColor(BaseColor.WHITE);
                        table.addCell(cell);

                        
                        p = new Paragraph("ESCUELA ACADEMICO PROFESIONAL DE INGENIERIA DE SISTEMAS-FISI",tituloEscuela);
                        cell = new PdfPCell(p);
                        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
                        cell.setPaddingTop(20);
                        cell.setBorderColor(BaseColor.WHITE);
                        table.addCell(cell);
                        
                        p = new Paragraph("PROGRAMACION ACADEMICA",tituloUniversidad);
                        cell = new PdfPCell(p);
                        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
                        cell.setBorderColor(BaseColor.WHITE);
                        table.addCell(cell);
                        
                        p = new Paragraph("SEMESTRE ACADEMICO 2013-II",tituloUniversidad);
                        cell = new PdfPCell(p);
                        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
                        cell.setBorderColor(BaseColor.WHITE);
                        table.addCell(cell);
                     
                        document.add(table);
                  
                    for(int m=0; m<listaDocentexClase.size(); m++){
                        listaDocentexClase.get(m).getNCicId();
                        idDcnCls = listaDocentexClase.get(m).getNDcnClsId();
                        nHoras = listaDocentexClase.get(m).getNClsId().getNHoras().intValue();
                        //aula= listaDocentexClase.get(m).getPeriodoxsalonList().get(0).getSlnId().getVNombre();

                        for (int i=0; i<listaSalon.size(); i++ ) {
                            //System.out.println(""+salon.getNSlnId()+listaHorarioSalon.get(salon.getNSlnId())+" = ");
                            //contcolumnas = 1;

                            for (int j=0; j<listaPeriodo.size(); j++) {

                                if(listaHorarios.get(indice).get(listaSalon.get(i).getNSlnId()).get(listaPeriodo.get(j).getNPrdId())!=null){
                                Docentexclase docenteXClase = listaHorarios.get(indice).get(listaSalon.get(i).getNSlnId()).get(listaPeriodo.get(j).getNPrdId());
                                //System.out.println("Indice:"+listaHorarioSalon.get(salon.getNSlnId()).get(periodo.getNPrdId()).getNDcnClsId());
                                if(idDcnCls == (int)listaHorarios.get(indice).get(listaSalon.get(i).getNSlnId()).get(listaPeriodo.get(j).getNPrdId()).getNDcnClsId()){
                                        asignatura = ""+listaHorarios.get(indice).get(listaSalon.get(i).getNSlnId()).get(listaPeriodo.get(j).getNPrdId()).getNClsId().getNAsgId().getVNombre();
                                        modalidad = ""+listaHorarios.get(indice).get(listaSalon.get(i).getNSlnId()).get(listaPeriodo.get(j).getNPrdId()).getNClsId().getNMdlDctId().getVNombre();
                                        horarioinicio = ""+listaPeriodo.get(j).getDtHora().getHours();
                                        dia = ""+listaPeriodo.get(j).getNDia();
                                        docente = docenteXClase.getNDcnId().getNPrsId().getVApellidos()+" "+docenteXClase.getNDcnId().getNPrsId().getVNombre();
                                        horariofinal = ""+(Integer.parseInt(horarioinicio) +nHoras);
                                        ciclo = ""+listaHorarios.get(indice).get(listaSalon.get(i).getNSlnId()).get(listaPeriodo.get(j).getNPrdId()).getNClsId().getNAsgId().getNCicAcdId().getVNemonico();
                                        aula = ""+listaSalon.get(i).getVNombre();
                                        /*if(modalidad.equals("Teórico")){
                                            modalidad = "T";
                                        }else if(modalidad.equals("Práctico")){
                                            modalidad = "P";
                                        }else if(modalidad.equals("Laboratorio")){
                                            modalidad = "L";
                                        }*/
                                        if(!cicloaux.equals(ciclo)){
                                            System.out.println("Ciclo:"+ciclo+" Entramos");
                                            p = new Paragraph("                                                                       ");
                                            document.add(p);
                                            table = new PdfPTable(1);
                                            p = new Paragraph(ciclo,tituloUniversidad);
                                            cell = new PdfPCell(p);
                                            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
                                            cell.setBorderColor(BaseColor.WHITE);
                                            table.addCell(cell);
                                            document.add(table);
                                            cicloaux = ciclo;
                                        }
                                        if(!asignaturaaux.equals(asignatura)){
                                            p = new Paragraph("                                                                       ");
                                            document.add(p);
                                            
                                            //System.out.println(""+asignatura+":Entramos ");
                                            table = new PdfPTable(1);
                                            p = new Paragraph(asignatura,tituloUniversidad);
                                            cell = new PdfPCell(p);
                                            cell.setHorizontalAlignment(Element.ALIGN_LEFT);

                                            cell.setBorderColor(BaseColor.WHITE);
                                            table.addCell(cell);
                                            
                                            p = new Paragraph("Coordinador(a) del curso:    "+docente,tituloEscuela);
                                            cell = new PdfPCell(p);
                                            cell.setHorizontalAlignment(Element.ALIGN_LEFT);
                                            cell.setBorderColor(BaseColor.WHITE);
                                            table.addCell(cell);
                                            
                                            document.add(table);
                                            
                                            table = new PdfPTable(widthscab);
                        
                                            //Codigo
                                            p = new Paragraph("T",negrita);
                                            cell = new PdfPCell(p);
                                            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
                                            cell.setBorderColor(BaseColor.BLACK);
                                            cell.setBackgroundColor(new BaseColor(214,214,255));
                                            table.addCell(cell);

                                            //Nombres
                                            p = new Paragraph("DIA",negrita);
                                            cell = new PdfPCell(p);
                                            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
                                            cell.setBorderColor(BaseColor.BLACK);
                                            cell.setBackgroundColor(new BaseColor(214,214,255));
                                            table.addCell(cell);

                                            //Fecha de Nacimiento
                                            p = new Paragraph("HORARIO",negrita);
                                            cell = new PdfPCell(p);
                                            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
                                            cell.setBorderColor(BaseColor.BLACK);
                                            cell.setBackgroundColor(new BaseColor(214,214,255));
                                            table.addCell(cell);
                                            
                                            p = new Paragraph("AULA",negrita);
                                            cell = new PdfPCell(p);
                                            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
                                            cell.setBorderColor(BaseColor.BLACK);
                                            cell.setBackgroundColor(new BaseColor(214,214,255));
                                            table.addCell(cell);

                                            //Fecha de Nacimiento
                                            p = new Paragraph("DOCENTE",negrita);
                                            cell = new PdfPCell(p);
                                            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
                                            cell.setBorderColor(BaseColor.BLACK);
                                            cell.setBackgroundColor(new BaseColor(214,214,255));
                                            table.addCell(cell);

                                            document.add(table);

                                            p = new Paragraph("");
                                            document.add(p);
                                            asignaturaaux = asignatura;
                                        }
                                        
                                        
                                        System.out.println("PDF:"+asignatura+","+modalidad+", Dia:"+dia+",Horario:"+horarioinicio +"Horariofinal:"+horariofinal+",Aula"+aula+",Docente"+docente+"Hora: "+nHoras+"ciclo:"+ciclo);
                                        if(Integer.parseInt(horarioinicio)<10){
                                            horarioinicio ="0"+horarioinicio;
                                        }
                                        horarioinicio = horarioinicio+":00";
                                        
                                        if(Integer.parseInt(horariofinal)<10){
                                            horariofinal ="0"+horariofinal;
                                        }
                                        horariofinal = horariofinal+":00";
                                        
                                        switch (modalidad) {
                                            case "Teórico": modalidad="T";break;
                                            case "Práctico": modalidad="P";break;
                                            case "Laboratorio": modalidad="L";break;
                                        }
                                        
                                        switch (dia) {
                                            case "1": dia="LUNES";break;
                                            case "2": dia="MARTES";break;
                                            case "3": dia="MIERCOLES";break;
                                            case "4": dia="JUEVES";break;
                                            case "5": dia="VIERNES";break;
                                            case "6": dia="SABADO";break;
                                        }
                                        
                                        /*if(dia.equals("1")){
                                            dia = "Lunes";
                                        }else if(dia.equals("2")){
                                            dia = "Martes";
                                        }*/
                                        
                                        //aula = ""+listaPeriodo.get(j).get;
                                        //table = new PdfPTable(1);
                                        table = new PdfPTable(widths);
                                        
                                        /*p = new Paragraph(asignatura,text);
                                        cell = new PdfPCell(p);
                                        cell.setHorizontalAlignment(Element.ALIGN_LEFT);
                                        cell.setBorderColor(BaseColor.BLACK);
                                        table.addCell(cell);*/
                                        
                                        p = new Paragraph(modalidad,text);
                                        cell = new PdfPCell(p);
                                        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
                                        cell.setBorderColor(BaseColor.BLACK);
                                        table.addCell(cell);
                                     
                                        p = new Paragraph(dia,text);
                                        cell = new PdfPCell(p);
                                        cell.setHorizontalAlignment(Element.ALIGN_LEFT);
                                        cell.setBorderColor(BaseColor.BLACK);
                                        table.addCell(cell);
                                        
                                        p = new Paragraph(horarioinicio,text);
                                        cell = new PdfPCell(p);
                                        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
                                        cell.setBorderColor(BaseColor.BLACK);
                                        table.addCell(cell);
                                        
                                        p = new Paragraph(horariofinal,text);
                                        cell = new PdfPCell(p);
                                        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
                                        cell.setBorderColor(BaseColor.BLACK);
                                        table.addCell(cell);
                                        
                                        p = new Paragraph(aula,text);
                                        cell = new PdfPCell(p);
                                        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
                                        cell.setBorderColor(BaseColor.BLACK);
                                        table.addCell(cell);
                                        
                                        p = new Paragraph(docente,text);
                                        cell = new PdfPCell(p);
                                        cell.setHorizontalAlignment(Element.ALIGN_LEFT);
                                        cell.setBorderColor(BaseColor.BLACK);
                                        table.addCell(cell);
                                        
                                        document.add(table);
                                        
                                        
                                        for (int k = 0; k < nHoras; k++) {

                                            listaHorarios.get(indice).get(listaSalon.get(i).getNSlnId()).
                                                    put( listaPeriodo.get(j+k).getNPrdId(), 
                                                        null);                
                                        }
                                }


                                }
                            }
                        }
                    }
                        
                       
                        
                   
                        document.close();

                //---------------------------------------------------------------------------------------------------------------------


                
                }
                catch (Exception de) {
                        de.printStackTrace();
                }
        
    }
    
}
